cc-pocket · mobile ui 2.0 · rewind & fork · v1

Session Rewind + Fork v1

Going back to an earlier point in a conversation, either by rewinding the session or forking a parallel one. Entry is a long press on a user message — no new navigation, no new tab. The whole design turns on one fact the confirm sheet must land in under two seconds: the transcript rewinds, the files do not.

390 × 844
dark · EN
4 screens
9 frames
2 routes
rewind · fork
Files are the loud part

The warning strip is fixed in the sheet, in bad tone, above the buttons — not a footnote and not dismissible. It names the one thing rewinding does not do and points at the surface that knows: the Git tab.

A dry run, not a dialog

The cost is counted before it is paid: four turns, eleven tool calls, set as a stat row you read at a glance. The sheet has one destructive filled button and a quiet Cancel, never two equal choices.

Rewind hides, fork keeps

One explainer row states which it is, in words, in both the sheet and the list. Rewound originals are tucked into a collapsed group and stay recoverable; forks are ordinary sessions with a lineage caption.

Borrowed vocabulary

Message rows, tool bands, the two-layer composer and the session list row are unchanged from Chat Master v2 and A Master Core v1. New here: the lifted message, the menu, the sheet, the lineage banner, one collapsed group.

A

Entry · long press a user message

The message lifts out of the dimmed transcript and keeps its own reading style; the menu hangs off it.
A1 · enabled

Copy stays where it has always been, first and captionless. The two new items each carry one line of what they do, because rewind and fork are not words a user should have to guess at. Turn number is printed on the lifted message so the anchor is unambiguous.

A2 · agent running · disabled

Only the two new items grey out — copying a message while the agent works is still fine. The reason is written once, at the foot of the menu, next to the running mark, and the composer already shows Stop, so the fix is visible on the same screen.

A3 · stale anchor · error

If the transcript moved under the sheet, the action fails closed: the menu and sheet dismiss, nothing is dropped, and the toast says what happened and what to do. Bad-tone hairline, no icon-only alarm, and it does not block the composer.

Entry rules
{{ r.n }}{{ r.text }}
B

Confirm · the mandatory dry run

Same four blocks in both variants, in the same order: cost, file warning, what happens to this session, decide.
B1 · rewind

The lifted message stays on screen above the sheet, so the sheet never asks about an anchor you can no longer see. Cancel is a hairline at two fifths the width of the filled action — reachable, obviously secondary.

B2 · fork

Three strings change: title, explainer, button. Everything else is identical, including the file warning — a fork does not roll files back either, and pretending otherwise would be the one mistake worth avoiding here.

Reading order, top to bottom
{{ r.n }}{{ r.text }}
Held lines

Warning, verbatim in both variants: Files are NOT rolled back — only the conversation rewinds. Check the Git tab for file state.

Explainer, rewind: The current session will be tucked away (recoverable). Fork: The current session stays untouched.

The counts are a dry run supplied by the caller. If the daemon cannot count them, the sheet does not guess and does not show the card — it shows nothing in that slot rather than a zero.

There is no third route in this sheet. Recovering a rewound original happens in the session list, where the tucked-away sessions actually live.

C

Landing · the new session

Where you came from, and the message you were retrying, already in the field.
C1 · after rewind

The lineage banner replaces the context row rather than stacking on top of it, so the header does not grow a second line of chrome. The original title is the tap target back. The composer holds the old wording as a selection: one keystroke replaces it, or you edit in place.

C2 · after fork

Identical mechanics, one word different in the banner: Fork of rather than Rewound from. The transcript above the anchor is shared history and reads exactly as it did in the parent.

Landing rules
{{ r.n }}{{ r.text }}
Open question for review

Titles. The frames assume the new session takes a derived title (Replay ordering, take 2) so the list can tell the two apart without reading captions. Inheriting the parent title verbatim is the other option, and it makes the list ambiguous. Worth a decision before build.

The banner is not dismissible in these frames. If it should be, it needs a rule for where lineage goes afterwards — Session info is the obvious home.

D

Session list · where the originals go

One collapsed group at the foot of the list. Forks are not special and stay in Active.
D1 · collapsed

The disclosure row sits below Recent and states the count, so nothing has silently disappeared. It is a muted row on the standard hairline, not a card, and it does not compete with New session.

D2 · expanded

Tucked-away originals keep the list row, dropped one step in weight and colour: hollow mark, quieter title, no body or meta line, and a caption naming where the conversation continued. The chevron opens the original read-only; recovery is its own decision inside it.

Row vocabulary, unchanged from A Master Core v1
RowMarkCaption
{{ k.row }} {{ k.mark }} {{ k.caption }}

No count badge, no duration, no branch health — the list prints only facts the daemon already supplies to it today. The group header is the only new string on this screen.

E

State table

Every state this feature can be in, what the user sees, and what it is forbidden to do.
StateTriggerShownNever
{{ s.name }} {{ s.trigger }} {{ s.shown }} {{ s.never }}
Scope. Chat, Sessions and the composer keep their contracts in Chat Master v2 and A Master Core v1; this file adds four surfaces to them and changes none of their rules. Git state is referenced, never restated — Session Git Tab v1 owns what files actually did. Not designed here: recovering a tucked-away original from inside it, deleting a rewound session, or rewinding on the Windows tray surface.